General WebSocket API information
- The base URL: wss://api-adapter.backend.currency.com/connect
- The base URL, demo account: wss://demo-api-adapter.backend.currency.com/connect
- All endpoints return either a JSON object or array.
- All time and timestamp related fields are in milliseconds.
- Websocket API connection is closed in case API is not pinged for a 30-seconds time interval.
- All the tokenised assets except companies tokens, tokenized bonds, tokens “KARMA.cx” and tokenised assets from Hong Kong markets are available in the first version (v1) of our API. In the second API version (v2) Hong Kong markets became also available.
- The list of assets available for leverage trading within API can be found here.
- Note that no specific updates frequency are implemented in the WebSocket API. The updates frequency depends on the corresponding market pair.
!Note. For the successful signature generation please sort parameters in the request payload according to the alphabetical order.
Please, refer to the WebSocket API part within the Swagger in order to get the information needed. More usage examples can be found here.
Troubleshooting
Subscribe method
const ws = new WebSocket
('wss://api-adapter.backend.currency.com/connect',
{perMessageDeflate: true});
let responseList = [];
let request, response = Object();
Callbacks
await ws.on('open', async function open() {
console.log("connected");
});
ws.on('close', async function close() {
console.log('disconnected');
});
ws.on('error', async function error(data) {
console.log('error');
console.log(data);
});
ws.on('message', async function incoming(data) {
response = JSON.parse(data);
responseList.push(response);
});
Correlation ID
This ID is needed for mapping asynchronous response with request
request.correlationId = request.correlationId + 1;
Request model
//Destination
request.destination = "/api/v1/leverageSettings";
//Request payload
request.payload = {"symbol": ETH/USD,
"timestamp": Date.now(),
"apiKey": apiKey};
request.payload.signature = getHash(request);
function getHash(request) {
let payload = "";
Object.keys(request.payload).sort().forEach(function(key) {
payload += key + "=" + request.payload[key] + "&";
});
payload = payload.substring(0, payload.length - 1);
console.log(payload);
let hash = CryptoJS.HmacSHA256(payload, apiSecret).toString();
console.log(hash);
return hash;
}
//Send request
message = JSON.stringify(request);
ws.send(message);
await sleep(5000);
index = responseList.findIndex(i =>
i.correlationId ===
request.correlationId.toString());
console.log('============================');
console.log('index: ' + index);
console.log(responseList[index]);
console.log('============================');
‘Symbol’ parameter description
Both for the exchange and leverage trading modes 'symbol' parameter can be checked within exchangeInfo stream.
Exchange trading mode: use symbol from the exchangeInfo stream;
Leverage trading mode: look into the 'symbol' from the exchangeInfo stream. In case ‘symbol’ has currencies in its name then the following format should be used: ‘BTC%2FUSD_LEVERAGE’. In case ‘symbol’ has only an asset name then the following format is correct: ‘Oil%20-%20Brent.’
ENUM definitions
Order types (orderTypes, type):
- LIMIT
- MARKET
- STOP
Order side (side):
- BUY
- SELL
Time in force (timeInForce):
- GTC
- IOC
- FOK
Kline/Candlestick chart intervals:
m -> minutes; h -> hours; d -> days; w -> weeks
- 1m
- 5m
- 15m
- 30m
- 1h
- 4h
- 1d
- 1w
Please note that in case no value for the "intervals" parameter is mentioned when using the wss:OHLCMarketData.subscribe endpoint then '1m' value is set by default.